package br.com.mresolucoes.aplicacao;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import utils.ImagemUtil;
import br.com.mresolucoes.imagens.Imagens;
import br.com.mresolucoes.persistencia.om.Estrategia;
import br.com.mresolucoes.persistencia.om.Regiao;
import br.com.mresolucoes.socket.AtendeSocket;
import br.com.mresolucoes.socket.Protocolo;

@SuppressWarnings("serial")
public class Tabuleiro extends JPanel
{
	/*-*-*-* Constantes Privadas *-*-*-*/
	private static final int LINHA_MATRIZ = 5;
	private static final int COLUNA_MATRIZ = 5;
	public static final boolean AGUA = false;
	public static final boolean NAVIO_Q = true;
	
	
	/*-*-*-* Variaveis e Objetos Privados *-*-*-*/
	private JButton bt[][] = new JButton[LINHA_MATRIZ][COLUNA_MATRIZ];
	private JLabel labelLinha[] = new JLabel[LINHA_MATRIZ];
	private JLabel labelColuna[] = new JLabel[COLUNA_MATRIZ];
	private JLabel vazio = new JLabel("");
	String label[] = {"A", "B", "C", "D", "E", "F", "G"};
	
	/*-*-*-* Listeners *-*-*-*/
	
	private EscutaBotao escutabt = new EscutaBotao();
	
	/*-*-*-* Construtores *-*-*-*/
	public Tabuleiro()
	{
		this.setBackground(Color.blue);
		this.setLayout(new GridLayout(LINHA_MATRIZ+1, COLUNA_MATRIZ+1, 2, 2));	
		this.add(vazio);
		
		for (int i=0; i<LINHA_MATRIZ; i++)
		{
			this.add(labelLinha[i] = new JLabel(label[i],JLabel.CENTER));
			labelLinha[i].setForeground(Color.white);
		}
	}
	
	/*-*-*-* Metodos Gets e Sets *-*-*-*/
	public void clear(boolean isAway){
		for (int i = 0; i < LINHA_MATRIZ; i++) {
			for (int j = 0; j < COLUNA_MATRIZ; j++) {
				bt[i][j].setIcon(null);
				bt[i][j].setEnabled(true);
				if(isAway) bt[i][j].addActionListener(escutabt);
			}
		}
	}
	public boolean loadNavios(Estrategia estrategia)
	{
		clear(false);
		int colunaInt=0;
		List<Regiao> regionList = estrategia.getRegioes();
		if(regionList.size() < 5) return false;
		for (int i = 0; i < regionList.size(); i++) {
			String coluna = regionList.get(i).getColuna();
			int linha = regionList.get(i).getLinha();
			for (int j=0;j<label.length;j++) { if(coluna.contains(label[j])) colunaInt = j; }
			bt[linha-1][colunaInt].setIcon(ImagemUtil.redimencionar(Imagens.BOTAO_NAVIO, 50, 50));
		}
		return true;
	}
	
	public void montarTabuleiro(boolean isHome)
	{
		for (int i=0; i<COLUNA_MATRIZ; i++)
		{
			this.add(labelColuna[i] = new JLabel(""+(i+1),JLabel.CENTER));
			labelColuna[i].setForeground(Color.white);
			for (int j=0; j<LINHA_MATRIZ; j++)
			{
			this.add(bt[i][j] = new JButton());
			bt[i][j].setName(""+i+""+j);
			if(!isHome) bt[i][j].addActionListener(escutabt);
			}
		}
	}
	public class EscutaBotao implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			if(AtendeSocket.getInstance().ehMinhaVez()){
				int pos[]=indexOf(e);
				bt[pos[0]-1][pos[1]].setEnabled(false);
				AtendeSocket.getInstance().enviarMensagem(Protocolo.JOGADA+"#"+pos[0]+"#"+label[pos[1]]);
			}
			else JOptionPane.showMessageDialog(Tela1.getInstance().getFocusOwner(), "Aguarde sua vez", "ERRO", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void mudarIcon(int linha, String coluna, boolean estado){
		int colunaInt = 0;
		for (int j=0;j<label.length;j++) { if(coluna.contains(label[j])) colunaInt = j; }
		if (estado == Tabuleiro.NAVIO_Q) bt[linha-1][colunaInt].setIcon(ImagemUtil.redimencionar(Imagens.BOTAO_NAVIOQ, 50, 50));
		else bt[linha-1][colunaInt].setIcon(ImagemUtil.redimencionar(Imagens.BOTAO_AGUA, 50, 50));
	}
	public int[] indexOf(ActionEvent e)
	{
		int pos[] = new int[2];
		String x = ((JButton)e.getSource()).getName();
		pos[0] = Integer.parseInt(String.valueOf(x.charAt(0)));
		pos[1] = Integer.parseInt(String.valueOf(x.charAt(1)));
		pos[0]++;
		return pos;
	}
}

